public void execute() {
	preProcess();
	try {
		performBuild();
	} catch (BuildCityRuntimeException e) {
		log.error("Exception during build occurred: " + e.getMessage());
		buildCtx.considerAsFailed(e);
	} catch (Exception e) {
		log.error("Fatal error during build occurred: " + e.getMessage(), e);
		buildCtx.considerAsFailed(e);
	}
	postProcess();
}

protected abstract void preProcess();
protected abstract void performBuild() throws BuildCityRuntimeException;
protected abstract void postProcess();